﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ProyectoBastanteo.Negocio;
using ProyectoBastanteo.Dominio;

namespace ProyectoBastanteo.Controllers
{
    public class RepresentanteController : Controller
    {
        //
        // GET: /Representante/
        IAdministracionService adminService = null;

        public ActionResult Index()
        {

            TempData["Clientes"] = ListarClientes();
            return View(adminService.ListarRepresentantes());
                        
        }

        //
        // GET: /Representante/Details/5

        public ActionResult Details(int codigo, string nrodoc)
        {
            TempData["Clientes"] = ListarClientes();
            return View(adminService.ObtenerRepresentante(nrodoc));
        }

        //
        // GET: /Representante/Create

        public ActionResult Create()
        {
            TempData["Clientes"] = ListarClientes();
            return View();
        } 

        //
        // POST: /Representante/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {

                Cliente clienteCol =  adminService.ObtenerCliente(int.Parse(collection["Cliente"]));
                string nombrep = collection["nombrep"];
                string tidorep = collection["tidorep"];
                string nudorep = collection["nudorep"];
                string cargrep = collection["cargrep"];       
                string gruprep = collection["gruprep"];

                Representante r = adminService.RegistrarRepresentante(clienteCol.codclie, nombrep, tidorep, nudorep, cargrep, gruprep);
                TempData["Clientes"] = ListarClientes();

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                TempData["Clientes"] = ListarClientes();
                return View("Create");
            }
        }
        
        //
        // GET: /Representante/Edit/5
 
        public ActionResult Edit(int codigo, string nrodoc)
        {

            TempData["Clientes"] = ListarClientes();
            return View(adminService.ObtenerRepresentante(nrodoc));
                   
            
        }

        //
        // POST: /Representante/Edit/5

        [HttpPost]
        public ActionResult Edit(int codigo, string nrodoc, FormCollection collection)
        {
            Cliente xClie = new Cliente();
            xClie.codclie = codigo;

            Representante RepresentanteAModificar = new Representante()
            {
                codclie = adminService.ObtenerCliente(xClie.codclie), 
                nombrep = (string)collection["nombrep"],
                tidorep = (string)collection["tidorep"],
                nudorep = (string)collection["nudorep"],
                cargrep = (string)collection["cargrep"],
                gruprep = (string)collection["gruprep"]

            };
            
                 
            
            try
            {
                Representante RepresentanteModificado = adminService.ModificarRepresentante(RepresentanteAModificar);
                TempData["Clientes"] = ListarClientes();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", RepresentanteAModificar); // Problemas! De nuevo a Modificacion.aspx

            }
        }

        //
        // GET: /Representante/Delete/5

        public ActionResult Delete(int codigo, string nrodoc)
        {
            TempData["Clientes"] = ListarClientes();
            return View(adminService.ObtenerRepresentante(nrodoc));
            
        }

        //
        // POST: /Representante/Delete/5

        [HttpPost]
        public ActionResult Delete(int codigo, string nrodoc, FormCollection collection)
        {
            Cliente xClie = new Cliente();
            xClie.codclie = codigo;

            try
            {
                Representante RepresentanteAEliminar = adminService.ObtenerRepresentante(nrodoc);
                adminService.EliminarRepresentante(RepresentanteAEliminar);
                TempData["mensaje"] = "Representante" + RepresentanteAEliminar.nombrep + " eliminado exitosamente";
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Eliminacion", adminService.ObtenerRepresentante(nrodoc)); // Problemas! De nuevo a Eliminacion.aspx

            }
            
        }

        private ICollection<SelectListItem> ListarClientes()
        {
            ICollection<SelectListItem> clientes = new List<SelectListItem>();
            clientes.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            foreach (Cliente cliente in adminService.ListarClientes())
                clientes.Add(new SelectListItem()
                {
                    Value = cliente.codclie.ToString(),
                    Text = cliente.razclie
                });
            return clientes;
        }








    }
}
